<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 实现一个方法的连续调用
        // var zhu = {
        //     smoke: function() {
        //         console.log('嘶~呼');
        //         return this;
        //     },
        //     drink: function() {
        //         console.log('我还能喝~');
        //         return this;
        //     },
        //     perm: function() {
        //         console.log('芜湖~');
        //         return this;
        //     }
        // }
        // zhu.smoke().drink().perm().smoke().drink().perm();

        //            命名空间
        // 管理变量，防止污染全局，适用于模块化开发
        // var org = {
        //     department1: {
        //         xiaohuang: {
        //             name: '黄蜀郎'
        //         },
        //         laozhu: {

        //         }
        //     },
        //     department2: {
        //         awei: {

        //         },
        //         laowang: {

        //         }
        //     }
        // }
        // var oldYellow = org.department1.xiaohuang;
        // console.log(oldYellow.name);



        //      属性表示方法
        // obj.prop
        // obj['prop']

        // var obj = {
        //     name : 'name'
        // }

        // obj.name调用属性时 ==>系统隐式转换成obj['name']



        // var qidaye = {
        //     son1: {
        //         name: '老朱'
        //     },
        //     son2: {
        //         name: '小黄'
        //     },
        //     son3: {
        //         name: '啊涛'
        //     },
        //     saySon: function(num) {
        //         return this['son' + num]
        //     }
        // }




        //            对象的枚举(遍历)
        // for in
        // 1.hasOwnproperty（方法：验证对象中的属性是自己的还是原型上的，如果是自己的属性就返回true）
        // 2.in (判断属性是否在这个对象，是的话返回true) *与hasOwnproperty的区别：它认为原型里的属性也是自己的
        //       'height' in obj;
        // 3.*instanceof
        // A对象 是不是 B构造函数构造出来的
        // 看A对象的原型链上  有没有  B的原型
        // A  instanceof  B


        // 区别数组和对象的方法     instanceof || toString()
        // var a = Object.prototype.toString.call(123);
        // console.log(a);
        // var b = Object.prototype.toString.call([]);
        // console.log(b);
        // var c = Object.prototype.toString.call({});
        // console.log(c);



        // for  in  循环

        // var obj1 = {
        //     a: 123,
        //     b: 234,
        //     c: 345
        // }
        // for (var key in obj1) {
        //     obj1[key]++;
        // }

        // var obj = {
        //     name: '黄蜀郎',
        //     age: 20,
        //     sex: 'male',
        //     height: 180,
        //     weight: 75,
        //     __proto__: {
        //         lastName: '猪'
        //     }
        // }
        // for (var prop in obj) {
        //     if (obj.hasOwnProperty(prop)) {//hasOwnProperty  自身属性，不拿原型
        //         console.log(prop + ' : ' + obj[prop]);
        //     }
        // }
        // 根据对象的个数来决定循环圈数  (会把原型上的属性也拿出来)
    </script>
</body>

</html>